/*

第二讲   入门与安装
1、配置域名
	修改host文件（C:\Windows\System32\drivers\etc\hosts）,在后面添加 127.0.0.1 www.tp5.com
	
2、配置apache虚拟主机，修改Httpd.conf，在后面添加
	<VirtualHost *:80>
	DocumentRoot "D:\php\workspace\thinkphp5.0\public"
	ServerName tp.com
	</VirtualHost>
	表示使用域名tp.com重定向到D:\php\workspace\thinkphp5.0\public目录
	
3、配置伪静态如下：
	1）apache环境，需要用下面的配置：
	<IfModule mod_rewrite.c>
	  Options +FollowSymlinks -Multiviews
	  RewriteEngine On
	
	  RewriteCond %{REQUEST_FILENAME} !-d
	  RewriteCond %{REQUEST_FILENAME} !-f
	  RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
	</IfModule>	
	
	
	2）phpstudy环境，需要用下面的配置：
	<IfModule mod_rewrite.c>
	  Options +FollowSymlinks -Multiviews
	  RewriteEngine On
	
	  RewriteCond %{REQUEST_FILENAME} !-d
	  RewriteCond %{REQUEST_FILENAME} !-f
	  RewriteRule ^(.*)$ index.php[L,E=PATH_INFO:$1]
	</IfModule>	
	
	3）Nginx环境的话，可以在Nginx.conf中添加：
	location/{//....省略部分代码
		if(!-e $request_filename){
			rewrite ^(.*)$ /index.php?s=/$1 last;
			break;
			}
		}
	
	表示当前URL（tp.com/admin/index/index/index）地址不识别的时候，把后面的地砖（admin/index/index/index）当作参数传给
	tp.com/index.php，最后的地址就成了：tp.com/index.php/admin/index/index/index
	
4、TP向模板传数据
	$data = Db::name("member")->find();
	$this->assign('data', $data);
	return $this->fetch();
	使用assign()函数进行设置，fetch()函数进行输出模板.



第三讲  URL和路由
1、URL访问规则
	1）TP5路径全部转换为小写；控制器首字母转换为大写
		tp.com/ADMIN/index/index 转换后为： tp.com/admin/Index/index
	2）驼峰式控制器名需要用下划线方式
		class HelloWorld extends Controller{
			public function index($name = '张三'){
			}
		}
		这个控制器就需要这样访问：tp.com/admin/hello_world/index
	3）控制器名中，用下划线（_）标识后面的是一个大写字母的功能是有一个开关配置项url_convert进行控制的，为ture就是自动转换，反正则反.
		'url_convert' => false时，tp.com/ADMIN/helloWorld/index 转换后为： tp.com/admin/HelloWorld/index，
		就是说只会把首字母大写，其他都不变.
		
	4、如果PHP环境不支持pathinfo方式的URL访问，可以使用兼容模式
		以s=参数 方式，如：tp.com/index.php?s=admin/index/index

	5、路由配置，配置route.php
		/* hello        hello路由，在URL中需要匹配，如：www.tp.com/hello	
		 * [:name]      []表示可选     ：开头表示参数，并且参数名需要与hello参数名相同
		 * admin/index/hello  表示访问路径，admin控制器，index函数，hello方法
		 * ['method' => 'get', ['ext' => 'html']]  匹配条件:method为请求方式，ext为路径后缀。
		 * 有效访问URL如：www.tp.com/hello/lisi.html
		 */
		'hello/[:name]' => ['admin/index/hello', ['method' => 'get'], ['ext' => 'html']],
		
		/* 
		 * 多参数情况
		 * :year/:month  参数没有[]，因此此参数是必须的
		 * 'year' => '\d{4}', 'month' => '\d{2}'  表示参数使用正则表达式限制，年为4位整数，月为2位整数
		 * 后缀.html 可以加可以不加，加的时候必须是.html
		 * 这样URL可以为：http://www.tp.com/today/2009/12   http://www.tp.com/today/2009/12.html
		 */
		'today/:year/:month' => ['admin/index/today', ['method' => 'get'], ['year' => '\d{4}', 'month' => '\d{2}']],
			
		/*
		 *多参数可选情况
		 * 在参数可选情况下，需要与today1方法对应，就是讲today1方法中需要给出默认参数才行
		 * 这样URL可以为：http://www.tp.com/today1/2009   http://www.tp.com/today1/2009/12
		 */
		'today1/:year/[:month]' => ['admin/index/today1', ['method' => 'get'], ['year' => '\d{4}', 'month' => '\d{2}','ext' => 'html']],


	6）设置URL参数分隔符
		在config.php中使用'pathinfo_depr' 参数进行配置，默认为'pathinfo_depr'  => '/',如果配置为'pathinfo_depr' => '-'，
		则上面多参数情况就可以这样访问：http://www.tp.com/today1/2009-12 或者 http://www.tp.com/today1-2009-12，这样达到了段路径的目的，搜索引擎就可以很容易的搜索到。
		
		
	7）URL地址生成
		Url类提供php内部页面灵活跳转，不需要写相应的URL地址和配置相应的路由，只需要使用使用控制器的类中的方法名作为参数就可以得到相应的路径。示例：
		echo Url::build('url2', 'a=1&b=2');          输出：/admin/index/url2/a/1/b/2.html
		echo url('url2', 'a=1&b=2');                 输出：/admin/index/url2/a/1/b/2.html         //建议实际应用使用这种方式
		echo url('url2', ['a' => 1, 'b' => 2]);      输出：/admin/index/url2/a/1/b/2.html
		echo url('url2', array('a' =>1, 'b' => 2));  输出：/admin/index/url2/a/1/b/2.html
		echo url('admin/index/url2', 'a=1&b=2');     输出：/admin/index/url2/a/1/b/2.html
		echo url('admin/HelloWorld/url2', 'a=1&b=2');输出：/admin/hello_world/url2/a/1/b/2.html   //自动切换url_convert
		echo url('today/2007/06');                   输出：/today/2007/06.html                    //路由规则


第四讲  请求request与相应response

	1）TP的Request对象的作用是与客户端交互，收集客户端的Form、Cookies、超链接，或者收集服务器端的环境变量（包括：$_GET  $_POST $_REQUEST $_COOKIE $_FILES ），
	它会对这些信息进行校验后封装到Request对象里面。
	
	2）TP的Response对象用于动态响应客户端请示，控制发送给用户的信息，并将动态生成响应。通常用于输出数据给客户端或者浏览器。
	输出类型有：渲染模板输出（view()方法）、json输出（json()方法）、jsonp输出（jsonp()方法）、XML输出（xml()方法）、页面重定向（redirect()方法）、$this->success()或者$this->error()。

	3）Request使用
		1】是一个单例类，在没有继承Controller的情况下可以这样得到： $request = Request::instance();  $request->url()
		2】助手函数request()也可以获取request内容，如：request()->url(); 
		3】Controller内置request引用，                        如：$this->request->url(); 
		4】Request绑定自定义参数，如：$this->request->bind("user_name", 'zhang san'); //动态绑定属性
		5】print_r(request()->param())，  echo request()->param("name")//获取参数
		6】助手函数input()直接就可以获取所有参数，推荐使用。  print_r(input());echo input("name")  与5】输出等效。
		7】request的方法支持变量的过滤和默认值，如：echo $request->param("name", "jack", "strtolower")."<br/>"; //param()方法：变量name如果没有传入，这用默认值jack,如果有就用strtolower函数进行转换为小写
		8】获取指定参数：
			$request->get()
			$request->get("name")
			$request->post()
			$request->post("name")
			$request->cookie("name")
			$request->file("image")
			input('get.')
			input('get.name')
			input('post')
			input('post.name')
			input('cookit.name')
			input('file.image')
			$request->method()
			$request->ip()  //IP地址
			$request->isAjax() //是否是ajax请求
			$request->module() //模块名
			$request->controller() //控制器名
			$request->action()  //动作名

	4）相应返回
		1】json($array);  //json正常返回
		2】json($array, 201);//json指定返回状态
		3】xml($array);
		4】$this->assign('data', $data);$this->assign('name', '渲染模板');return $this->fetch('index/index');	//渲染模板输出
		5】$this->success('页面正常跳转', 'hello');		
		6】$this->error('错误提示页面','hello');
		7】$this->redirect('www.baidu.com'); //重定向



第七讲  SQL追踪器



*/